strpbrk関数は、文字列から文字のセットに含まれる文字を検索し、その位置を返します。
#include <string.h>
char *strpbrk(const char *s, const char *accept);
*sは検索対象文字列を指定します。
*acceptは検索する文字のセットを指定します。
戻り値として、文字セット中の文字と一致した文字の位置(ポインタ)を返します。一致しなかった場合はNULLを返します。
プログラム 例
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 1024
int main()
{
FILE *fp;
char path[50];
char key_set[11];
char buff[SIZE];
char *buff_ptr;
int key_cnt;
printf('ファイルのパス名を入力してください ==> ');
scanf('%s', path);
if ((fp = fopen(path, 'r')) == NULL) {
fprintf(stderr, '%sのオープンができませんでした\n', path);
exit(EXIT_FAILURE);
}
printf('検索する文字セットを入力してください(10文字以下) ==> ');
scanf('%s', key_set);
key_cnt = 0;
while(fgets(buff, SIZE, fp) != NULL) {
buff_ptr = buff;
while (*buff_ptr) {
/* 文字セットに有る文字を検索 */
if ((buff_ptr = strpbrk(buff_ptr, key_set)) != NULL) {
++key_cnt;
++buff_ptr;
}
else {
break;
}
}
}
fclose(fp);
printf('%sファイルには「%s」のセットが%d個ありました\n',
path, key_set, key_cnt);
return EXIT_SUCCESS;
}
例の実行結果
$ cat temp.txt
#include <stdio.h>
int main()
{
printf('Hello World!!.\n');
return 0;
}
$
$ ./strpbrk.exe
ファイルのパス名を入力してください ==> temp.txt
検索する文字セットを入力してください(10文字以下) ==> (){}
temp.txtファイルには「(){}」のセットが6個ありました
$
$ ./strpbrk.exe
ファイルのパス名を入力してください ==> temp.txt
検索する文字セットを入力してください(10文字以下) ==> ;
temp.txtファイルには「;」のセットが2個ありました
$
$ ./strpbrk.exe
ファイルのパス名を入力してください ==> temp.txt
検索する文字セットを入力してください(10文字以下) ==> WH
temp.txtファイルには「WH」のセットが2個ありました
$